package com.ygp.dtp.common.config.properties;

import com.ygp.dtp.common.config.threadpool.ThreadPoolProperties;
import com.ygp.dtp.common.config.web.JettyThreadPool;
import com.ygp.dtp.common.config.web.TomcatThreadPool;
import com.ygp.dtp.common.config.web.UndertowThreadPool;
import com.ygp.dtp.common.constant.DynamicTpConstant;
import com.ygp.dtp.common.dto.NotifyPlatform;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @description: 配置信息
 * @motto: 代码源于生活，高于生活艺术
 * @author: zhouhengzhe
 * @date: 2022/8/4 16:11
 * @since 1.0
 **/
@Slf4j
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Component
@ConfigurationProperties(prefix = DynamicTpConstant.MAIN_PROPERTIES_PREFIX)
public class DtpProperties {

    /**
     * 是否开启动态数据源
     */
    private boolean enabled = true;

    /**
     * 是否打印广告位
     */
    private boolean enabledBanner = true;

    /**
     * nacos配置
     */
    private Nacos nacos;

    /**
     * apollo配置
     */
    private Apollo apollo;

    /**
     * 配置文件类型
     */
    private String configType = "yml";

    /**
     * 是否开启信息手机
     */
    private boolean enabledCollect = false;

    /**
     * 信息收集类型
     */
    public String collectorType = "logging";

    /**
     * 信息收集存放目录
     */
    public String logPath;

    /**
     * 监控间隔，时间单位（s）
     */
    private int monitorInterval = 5;

    /**
     * 线程池执行器配置
     */
    private List<ThreadPoolProperties> executors;

    /**
     * Tomcat工作线程池
     */
    private TomcatThreadPool tomcatTp;

    /**
     * Jetty工作线程池
     */
    private JettyThreadPool jettyTp;

    /**
     * Undertow工作线程池
     */
    private UndertowThreadPool undertowTp;

    /**
     * 通知平台配置。
     */
    private List<NotifyPlatform> platforms;

    @Data
    public static class Nacos {

        private String dataId;

        private String group;

        private String namespace;
    }

    @Data
    public static class Apollo {

        private String namespace;
    }
}
